common.skill

প্র্যাকটিস প্রোজেক্টস

Computer Programming - সি++ প্রোগ্রামিং (C++ Programming)
310
310

প্রোগ্রামিং দক্ষতা বাড়ানোর জন্য প্র্যাকটিস প্রোজেক্ট খুবই কার্যকর। প্র্যাকটিস প্রোজেক্টগুলোর মাধ্যমে বাস্তব সমস্যার সমাধান শেখা যায়, এবং কোডিংয়ের দক্ষতা ও আত্মবিশ্বাস বাড়ে। কিছু মজার ও কার্যকর প্র্যাকটিস প্রোজেক্টের আইডিয়া নিচে দেওয়া হলো:


১. ক্যালকুলেটর অ্যাপ্লিকেশন

  • বর্ণনা: একটি ক্যালকুলেটর তৈরি করুন, যা যোগ, বিয়োগ, গুণ, ভাগ এবং মডুলাস অপারেশন করতে পারে।
  • প্রযুক্তি: C++, Python, JavaScript (জাভাস্ক্রিপ্ট দিয়ে ওয়েব ক্যালকুলেটরও বানানো যেতে পারে)।
  • উন্নত সংস্করণ: বৈজ্ঞানিক ক্যালকুলেটর তৈরি করতে পারেন, যেখানে ট্রিগনোমেট্রি এবং লগারিদম ফাংশন থাকবে।

২. কনভার্টার অ্যাপ্লিকেশন

  • বর্ণনা: একটি কনভার্টার তৈরি করুন, যা বিভিন্ন ইউনিট (যেমন, মাইল থেকে কিলোমিটার, সেলসিয়াস থেকে ফারেনহাইট) পরিবর্তন করতে পারে।
  • প্রযুক্তি: Python, Java, C++।
  • উন্নত সংস্করণ: কারেন্সি কনভার্টার তৈরি করতে পারেন, যেখানে বর্তমান এক্সচেঞ্জ রেট আপডেট করা হবে।

৩. কুইজ অ্যাপ্লিকেশন

  • বর্ণনা: সাধারণ জ্ঞান বা যেকোনো টপিক নিয়ে একটি কুইজ অ্যাপ বানান।
  • প্রযুক্তি: Python (Tkinter), HTML/CSS/JavaScript (ওয়েব কুইজ)।
  • উন্নত সংস্করণ: টাইমার ফিচার যুক্ত করতে পারেন এবং প্রতি রাউন্ড শেষে স্কোর দেখাতে পারেন।

৪. টাস্ক ম্যানেজার

  • বর্ণনা: একটি টাস্ক ম্যানেজার অ্যাপ তৈরি করুন, যেখানে ব্যবহারকারী তাদের টাস্ক অ্যাড, রিমুভ, এবং এডিট করতে পারবেন।
  • প্রযুক্তি: Python (Tkinter বা Flask), JavaScript (React বা Vue)।
  • উন্নত সংস্করণ: টাস্ক ম্যানেজারকে বিভিন্ন ফিল্টার ও রিমাইন্ডার ফিচার যুক্ত করতে পারেন।

৫. টেক্সট এনালাইজার

  • বর্ণনা: একটি অ্যাপ তৈরি করুন, যা টেক্সট ইনপুট নিয়ে তার শব্দ সংখ্যা, অক্ষর সংখ্যা, এবং শব্দের গড় দৈর্ঘ্য হিসাব করবে।
  • প্রযুক্তি: Python, Java, C++।
  • উন্নত সংস্করণ: স্প্যাম ডিটেকশন, সেনটিমেন্ট অ্যানালাইসিস ইত্যাদি বৈশিষ্ট্য যোগ করতে পারেন।

৬. রক-পেপার-সিজর্স গেম

  • বর্ণনা: ক্লাসিক রক-পেপার-সিজর্স গেম তৈরি করুন।
  • প্রযুক্তি: Python, Java, C++।
  • উন্নত সংস্করণ: প্লেয়ারদের স্কোর দেখানো এবং একাধিক রাউন্ড খেলার সুযোগ দিতে পারেন।

৭. রিমাইন্ডার অ্যাপ্লিকেশন

  • বর্ণনা: একটি অ্যাপ বানান, যেখানে ব্যবহারকারী সময় নির্দিষ্ট করে নোট সেট করতে পারবেন, যা নির্দিষ্ট সময় পর একটি রিমাইন্ডার শো করবে।
  • প্রযুক্তি: Python (Tkinter বা Flask), JavaScript।
  • উন্নত সংস্করণ: নোটিফিকেশন বা ইমেল সাপোর্ট যোগ করতে পারেন।

৮. কন্টাক্ট ম্যানেজমেন্ট সিস্টেম

  • বর্ণনা: কন্টাক্ট ম্যানেজার তৈরি করুন, যেখানে ব্যবহারকারী কন্টাক্ট সংরক্ষণ, মুছা এবং খুঁজে পাবেন।
  • প্রযুক্তি: Python, Java, C++।
  • উন্নত সংস্করণ: কন্টাক্টের সাথে ইমেজ এবং ইমেল ইন্টিগ্রেশন যোগ করতে পারেন।

৯. ওয়েদার অ্যাপ্লিকেশন

  • বর্ণনা: একটি অ্যাপ তৈরি করুন, যা নির্দিষ্ট শহরের আবহাওয়ার পূর্বাভাস দেখাবে।
  • প্রযুক্তি: Python (Flask বা Tkinter), JavaScript।
  • উন্নত সংস্করণ: অ্যাপটি থেকে বিভিন্ন শহরের আবহাওয়া দেখার ফিচার যোগ করতে পারেন এবং API থেকে আবহাওয়ার তথ্য সংগ্রহ করতে পারেন।

১০. বুক ম্যানেজমেন্ট সিস্টেম

  • বর্ণনা: একটি বুক ম্যানেজমেন্ট সিস্টেম তৈরি করুন, যেখানে বই সংরক্ষণ, মুছা এবং খুঁজে পাওয়া যাবে।
  • প্রযুক্তি: Python, Java।
  • উন্নত সংস্করণ: একটি ডেটাবেস ব্যবহার করতে পারেন এবং স্ট্যাটাস (অ্যাভেইলেবল বা ইস্যু করা) যোগ করতে পারেন।

এসব প্রজেক্ট শুরু করার জন্য কিছু সাধারণ টিপস:

  1. প্রকল্পের লক্ষ্য নির্ধারণ করুন: প্রাথমিক বৈশিষ্ট্যগুলোর একটি তালিকা তৈরি করে শুরু করুন এবং বর্ধিত বৈশিষ্ট্যগুলো পরে যুক্ত করুন।
  2. ভাগ করে কাজ করুন: বড় প্রজেক্টকে ছোট ছোট অংশে ভাগ করুন, যেমন UI, ডেটা ম্যানেজমেন্ট, ইন্টারেকশন।
  3. বাগ ফিক্স এবং টেস্ট: প্রত্যেকটি ফিচার যোগ করার পর তা সঠিকভাবে কাজ করছে কি না, তা পরীক্ষা করুন।

এই প্র্যাকটিস প্রোজেক্টগুলো আপনার কোডিং দক্ষতা বাড়াতে এবং বাস্তব সমস্যার সমাধান শেখাতে সহায়ক হবে।

common.content_added_by

ক্যালকুলেটর অ্যাপ তৈরি

263
263

C++ ব্যবহার করে একটি সাধারণ ক্যালকুলেটর অ্যাপ তৈরি করা যেতে পারে, যা ব্যবহারকারীর ইনপুট অনুযায়ী গাণিতিক অপারেশন (যেমন, যোগ, বিয়োগ, গুণ, ভাগ) সম্পাদন করে। নিচে একটি সাধারণ ক্যালকুলেটর প্রোগ্রামের উদাহরণ দেয়া হলো, যা মৌলিক চারটি গাণিতিক অপারেশন করতে সক্ষম।

উদাহরণ: ক্যালকুলেটর প্রোগ্রাম

#include <iostream>
using namespace std;

class Calculator {
public:
    // যোগ ফাংশন
    double add(double a, double b) {
        return a + b;
    }

    // বিয়োগ ফাংশন
    double subtract(double a, double b) {
        return a - b;
    }

    // গুণ ফাংশন
    double multiply(double a, double b) {
        return a * b;
    }

    // ভাগ ফাংশন
    double divide(double a, double b) {
        if (b == 0) {
            cout << "Error: Division by zero is not allowed." << endl;
            return 0;
        }
        return a / b;
    }
};

int main() {
    Calculator calc;
    double num1, num2;
    char op;
    bool running = true;

    cout << "Welcome to Simple Calculator!" << endl;
    cout << "Operations: + (add), - (subtract), * (multiply), / (divide)" << endl;
    
    while (running) {
        cout << "\nEnter first number: ";
        cin >> num1;

        cout << "Enter operation (+, -, *, /) or 'q' to quit: ";
        cin >> op;

        if (op == 'q' || op == 'Q') {
            cout << "Exiting Calculator. Thank you!" << endl;
            break;
        }

        cout << "Enter second number: ";
        cin >> num2;

        switch(op) {
            case '+':
                cout << "Result: " << calc.add(num1, num2) << endl;
                break;
            case '-':
                cout << "Result: " << calc.subtract(num1, num2) << endl;
                break;
            case '*':
                cout << "Result: " << calc.multiply(num1, num2) << endl;
                break;
            case '/':
                cout << "Result: " << calc.divide(num1, num2) << endl;
                break;
            default:
                cout << "Invalid operation. Please try again." << endl;
        }
    }

    return 0;
}

প্রোগ্রামের ব্যাখ্যা

ক্যালকুলেটর ক্লাস:

  • Calculator নামে একটি ক্লাস তৈরি করা হয়েছে, যাতে চারটি ফাংশন আছে—add, subtract, multiply, এবং divide
  • প্রতিটি ফাংশন দুটি সংখ্যা গ্রহণ করে এবং সংশ্লিষ্ট গাণিতিক অপারেশন সম্পাদন করে ফলাফল প্রদান করে।

মেইন ফাংশন (main):

  • Calculator ক্লাসের একটি অবজেক্ট calc তৈরি করা হয়েছে।
  • ব্যবহারকারীর কাছ থেকে প্রথম সংখ্যা, অপারেশন এবং দ্বিতীয় সংখ্যা ইনপুট হিসেবে গ্রহণ করা হয়।
  • switch স্টেটমেন্ট ব্যবহার করে ইনপুট অনুযায়ী গাণিতিক অপারেশনটি নির্ধারণ করা হয়েছে।
  • op যদি 'q' বা 'Q' হয়, তবে লুপ থেকে বেরিয়ে এসে প্রোগ্রাম বন্ধ হয়ে যায়।
  • প্রতিটি অপারেশন শেষে প্রোগ্রামটি আবারও নতুন ইনপুট নেয়, যাতে একাধিক গাণিতিক অপারেশন একাধিকবার চালানো যায়।

প্রোগ্রাম আউটপুট

Welcome to Simple Calculator!
Operations: + (add), - (subtract), * (multiply), / (divide)

Enter first number: 10
Enter operation (+, -, *, /) or 'q' to quit: +
Enter second number: 20
Result: 30

Enter first number: 15
Enter operation (+, -, *, /) or 'q' to quit: *
Enter second number: 3
Result: 45

Enter first number: 25
Enter operation (+, -, *, /) or 'q' to quit: /
Enter second number: 5
Result: 5

Enter first number: 10
Enter operation (+, -, *, /) or 'q' to quit: q
Exiting Calculator. Thank you!

প্রোগ্রামের বৈশিষ্ট্য

  1. সহজ ইন্টারফেস: প্রোগ্রামটি ব্যবহারকারীর ইনপুট অনুযায়ী অপারেশন সম্পাদন করে।
  2. ত্রুটি হ্যান্ডলিং: divide ফাংশনে শূন্য দ্বারা ভাগ করার চেষ্টা করলে এর জন্য একটি ত্রুটি বার্তা প্রদর্শন করা হয়।
  3. চালু রাখা বা বন্ধ করা: প্রোগ্রামটি একাধিকবার অপারেশন চালানোর জন্য একটি লুপে রাখা হয়েছে। ব্যবহারকারী 'q' বা 'Q' প্রবেশ করিয়ে প্রোগ্রামটি বন্ধ করতে পারেন।

প্রোগ্রামের উন্নতির জন্য কিছু পরামর্শ

  1. অতিরিক্ত অপারেশন যোগ করা: যেমন, মডুলাস (%), পাওয়ার (^), স্কয়ার রুট ইত্যাদি।
  2. এন্টারারর হ্যান্ডলিং: ইনপুট হিসেবে সংখ্যার পরিবর্তে অন্য কিছু দিলে ত্রুটি প্রদর্শন করা যেতে পারে।
  3. ইন্টারফেস উন্নত করা: আরও ব্যবহারকারীর-বান্ধব ইন্টারফেস যোগ করা।

এই প্রোগ্রামটি একটি মৌলিক ক্যালকুলেটর তৈরি করে, যা ব্যবহারকারীর চাহিদা অনুযায়ী আরও উন্নত করা যেতে পারে।

common.content_added_by

স্টুডেন্ট ম্যানেজমেন্ট সিস্টেম

218
218

স্টুডেন্ট ম্যানেজমেন্ট সিস্টেম হলো এমন একটি প্রোগ্রাম, যেখানে শিক্ষার্থীদের তথ্য সংরক্ষণ, হালনাগাদ, খুঁজে পাওয়া এবং মুছে ফেলা যায়। এই ধরনের প্রোগ্রাম সাধারণত শিক্ষাপ্রতিষ্ঠানে ব্যবহৃত হয় শিক্ষার্থীদের তথ্য এবং তাদের একাডেমিক তথ্য ব্যবস্থাপনার জন্য। একটি সাধারণ স্টুডেন্ট ম্যানেজমেন্ট সিস্টেমে শিক্ষার্থীদের নাম, আইডি, বিভাগ, বয়স, ফলাফল ইত্যাদি সংরক্ষণ করা হয়।

স্টুডেন্ট ম্যানেজমেন্ট সিস্টেমের প্রধান বৈশিষ্ট্যসমূহ

  1. স্টুডেন্ট যোগ করা: নতুন শিক্ষার্থীর তথ্য সংরক্ষণ করা।
  2. স্টুডেন্ট তথ্য দেখানো: নির্দিষ্ট শিক্ষার্থীর তথ্য দেখানো।
  3. স্টুডেন্ট তথ্য আপডেট করা: কোনো শিক্ষার্থীর পূর্বে সংরক্ষিত তথ্য পরিবর্তন করা।
  4. স্টুডেন্ট মুছে ফেলা: কোনো শিক্ষার্থীর তথ্য ডাটাবেস থেকে মুছে ফেলা।
  5. সব শিক্ষার্থীর তালিকা দেখানো: ডাটাবেসে থাকা সমস্ত শিক্ষার্থীর তথ্য দেখানো।

উদাহরণ: স্টুডেন্ট ম্যানেজমেন্ট সিস্টেম (C++ এ তৈরি)

নিচের প্রোগ্রামটি একটি বেসিক স্টুডেন্ট ম্যানেজমেন্ট সিস্টেম তৈরি করতে ব্যবহার করা হয়েছে। এখানে শিক্ষার্থীদের জন্য একটি ক্লাস তৈরি করা হয়েছে এবং তাদের তথ্য সংরক্ষণ, হালনাগাদ এবং প্রদর্শনের জন্য বিভিন্ন মেথড ব্যবহার করা হয়েছে।

#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Student {
private:
    int id;
    string name;
    int age;
    string department;

public:
    Student(int id, string name, int age, string department) 
        : id(id), name(name), age(age), department(department) {}

    int getId() const { return id; }

    void display() const {
        cout << "ID: " << id << "\nName: " << name 
             << "\nAge: " << age << "\nDepartment: " << department << endl;
    }

    void update(string newName, int newAge, string newDept) {
        name = newName;
        age = newAge;
        department = newDept;
    }
};

class StudentManagementSystem {
private:
    vector<Student> students;

public:
    void addStudent(int id, string name, int age, string department) {
        Student newStudent(id, name, age, department);
        students.push_back(newStudent);
        cout << "Student added successfully!" << endl;
    }

    void displayStudent(int id) const {
        for (const auto& student : students) {
            if (student.getId() == id) {
                student.display();
                return;
            }
        }
        cout << "Student not found!" << endl;
    }

    void updateStudent(int id, string name, int age, string department) {
        for (auto& student : students) {
            if (student.getId() == id) {
                student.update(name, age, department);
                cout << "Student information updated successfully!" << endl;
                return;
            }
        }
        cout << "Student not found!" << endl;
    }

    void deleteStudent(int id) {
        for (auto it = students.begin(); it != students.end(); ++it) {
            if (it->getId() == id) {
                students.erase(it);
                cout << "Student deleted successfully!" << endl;
                return;
            }
        }
        cout << "Student not found!" << endl;
    }

    void displayAllStudents() const {
        if (students.empty()) {
            cout << "No students available." << endl;
            return;
        }
        for (const auto& student : students) {
            student.display();
            cout << "---------------------" << endl;
        }
    }
};

int main() {
    StudentManagementSystem sms;
    int choice, id, age;
    string name, department;

    do {
        cout << "\nStudent Management System\n";
        cout << "1. Add Student\n2. Display Student\n3. Update Student\n4. Delete Student\n5. Display All Students\n6. Exit\n";
        cout << "Enter your choice: ";
        cin >> choice;

        switch (choice) {
            case 1:
                cout << "Enter ID: "; cin >> id;
                cout << "Enter Name: "; cin.ignore(); getline(cin, name);
                cout << "Enter Age: "; cin >> age;
                cout << "Enter Department: "; cin.ignore(); getline(cin, department);
                sms.addStudent(id, name, age, department);
                break;
            case 2:
                cout << "Enter ID: "; cin >> id;
                sms.displayStudent(id);
                break;
            case 3:
                cout << "Enter ID: "; cin >> id;
                cout << "Enter New Name: "; cin.ignore(); getline(cin, name);
                cout << "Enter New Age: "; cin >> age;
                cout << "Enter New Department: "; cin.ignore(); getline(cin, department);
                sms.updateStudent(id, name, age, department);
                break;
            case 4:
                cout << "Enter ID: "; cin >> id;
                sms.deleteStudent(id);
                break;
            case 5:
                sms.displayAllStudents();
                break;
            case 6:
                cout << "Exiting..." << endl;
                break;
            default:
                cout << "Invalid choice. Please try again." << endl;
        }
    } while (choice != 6);

    return 0;
}

প্রোগ্রাম ব্যাখ্যা

Student ক্লাস:

  • শিক্ষার্থীর id, name, age, এবং department গুণাবলী রয়েছে।
  • display মেথড শিক্ষার্থীর তথ্য প্রিন্ট করতে ব্যবহৃত হয়।
  • update মেথড শিক্ষার্থীর তথ্য আপডেট করতে ব্যবহৃত হয়।

StudentManagementSystem ক্লাস:

  • students নামের একটি ভেক্টর রয়েছে, যা সব শিক্ষার্থীর অবজেক্ট সংরক্ষণ করে।
  • addStudent মেথড নতুন শিক্ষার্থী যোগ করে।
  • displayStudent মেথড নির্দিষ্ট id অনুযায়ী শিক্ষার্থীর তথ্য প্রিন্ট করে।
  • updateStudent মেথড নির্দিষ্ট id এর শিক্ষার্থীর তথ্য আপডেট করে।
  • deleteStudent মেথড নির্দিষ্ট id এর শিক্ষার্থী মুছে ফেলে।
  • displayAllStudents মেথড সকল শিক্ষার্থীর তথ্য প্রিন্ট করে।

main ফাংশন:

  • মেনু ড্রাইভেন প্রোগ্রামের মাধ্যমে ব্যবহারকারীকে বিভিন্ন অপশন প্রদান করে এবং ব্যবহারকারী প্রদত্ত অপশন অনুযায়ী কাজ সম্পন্ন করে।

ফিচার আপগ্রেডের সম্ভাবনা

  1. ডেটাবেস ইন্টিগ্রেশন: শিক্ষার্থীর তথ্য একটি ডাটাবেসে সংরক্ষণ করা যেতে পারে।
  2. ফাইল হ্যান্ডলিং: শিক্ষার্থীদের তথ্য একটি ফাইলে সংরক্ষণ করে এবং পরবর্তীতে পড়ার ব্যবস্থা করা যেতে পারে।
  3. GUI: প্রোগ্রামটিকে একটি GUI অ্যাপ্লিকেশন বানানো যেতে পারে, যাতে এটি আরও ব্যবহারবান্ধব হয়।
  4. ফিল্টার এবং সার্চ অপশন: শিক্ষার্থীদের বিভিন্ন বৈশিষ্ট্যের উপর ভিত্তি করে ফিল্টার ও সার্চ করার সুবিধা যুক্ত করা যেতে পারে।

এই প্রোগ্রামটি একটি বেসিক স্টুডেন্ট ম্যানেজমেন্ট সিস্টেমের ধারণা দেয়, যা প্রোগ্রামিংয়ের বেসিক কনসেপ্টগুলো যেমন, ক্লাস, অবজেক্ট, ভেক্টর, এবং মেনু ড্রাইভেন প্রোগ্রামিং-এর অনুশীলন করতে সহায়ক।

common.content_added_by

ফাইল এনক্রিপশন এবং ডিক্রিপশন টুল

205
205

C++ ব্যবহার করে একটি সহজ ফাইল এনক্রিপশন এবং ডিক্রিপশন টুল তৈরি করা যায়, যা ফাইলের ডেটাকে একটি নির্দিষ্ট কী (key) এর মাধ্যমে এনক্রিপ্ট এবং ডিক্রিপ্ট করতে সক্ষম। এই উদাহরণে, XOR এনক্রিপশন পদ্ধতি ব্যবহার করা হবে, যা প্রতিটি বাইটের সাথে একটি কী XOR অপারেশন প্রয়োগ করে ডেটাকে এনক্রিপ্ট এবং ডিক্রিপ্ট করে।

এনক্রিপশন এবং ডিক্রিপশন টুলের লজিক

  1. XOR এনক্রিপশন: XOR এনক্রিপশন একটি সাধারণ পদ্ধতি, যেখানে প্রতিটি বাইটকে একটি নির্দিষ্ট কী এর সাথে XOR অপারেশন করে এনক্রিপ্ট করা হয়। ডিক্রিপশনেও একই অপারেশন ব্যবহার করা হয়।
  2. ইনপুট ফাইল এবং আউটপুট ফাইল: একটি ইনপুট ফাইল থেকে ডেটা পড়া হবে, এবং এনক্রিপশন/ডিক্রিপশন প্রক্রিয়ার পর আউটপুট ফাইলে ডেটা লেখা হবে।
  3. কী (Key): একটি নির্দিষ্ট কী ব্যবহার করা হবে, যা ফাইল এনক্রিপশন এবং ডিক্রিপশনের জন্য অপরিহার্য।

উদাহরণ: ফাইল এনক্রিপশন এবং ডিক্রিপশন টুল

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

// এনক্রিপশন এবং ডিক্রিপশন ফাংশন
void encryptDecrypt(const string &inputFile, const string &outputFile, char key) {
    ifstream inFile(inputFile, ios::binary); // ইনপুট ফাইল ওপেন করা (বাইনারি মোডে)
    ofstream outFile(outputFile, ios::binary); // আউটপুট ফাইল ওপেন করা (বাইনারি মোডে)

    if (!inFile || !outFile) {
        cout << "Error: Could not open input or output file." << endl;
        return;
    }

    char ch;
    while (inFile.get(ch)) { // প্রতিটি চরিত্র পড়া
        char encryptedChar = ch ^ key; // XOR এনক্রিপশন/ডিক্রিপশন
        outFile.put(encryptedChar); // এনক্রিপ্টেড/ডিক্রিপ্টেড ডেটা লেখা
    }

    inFile.close();
    outFile.close();

    cout << "Operation completed successfully. Output file: " << outputFile << endl;
}

int main() {
    string inputFile, outputFile;
    char key;
    char choice;

    cout << "File Encryption and Decryption Tool" << endl;
    cout << "Choose operation:" << endl;
    cout << "1. Encrypt a file" << endl;
    cout << "2. Decrypt a file" << endl;
    cout << "Enter choice (1 or 2): ";
    cin >> choice;

    cout << "Enter the input file name: ";
    cin >> inputFile;
    cout << "Enter the output file name: ";
    cin >> outputFile;
    cout << "Enter a single-character key for encryption/decryption: ";
    cin >> key;

    if (choice == '1') {
        encryptDecrypt(inputFile, outputFile, key); // এনক্রিপশন অপারেশন
    } else if (choice == '2') {
        encryptDecrypt(inputFile, outputFile, key); // ডিক্রিপশন অপারেশন
    } else {
        cout << "Invalid choice!" << endl;
    }

    return 0;
}

প্রোগ্রামের ব্যাখ্যা

ফাংশন encryptDecrypt:

  • এই ফাংশনটি একটি ইনপুট ফাইল পড়ে এবং প্রতিটি বাইটের সাথে XOR অপারেশন করে আউটপুট ফাইলে লেখা হয়।
  • প্রতিটি বাইটকে নির্দিষ্ট একটি key এর সাথে XOR করে এনক্রিপ্ট বা ডিক্রিপ্ট করা হয়।

মেইন ফাংশন (main):

  • প্রথমে ব্যবহারকারীকে এনক্রিপশন বা ডিক্রিপশন অপশন নির্বাচন করতে বলা হয়।
  • ইনপুট ফাইলের নাম, আউটপুট ফাইলের নাম এবং কী ইনপুট নেয়া হয়।
  • encryptDecrypt ফাংশনে এই ইনপুট গুলো পাঠিয়ে এনক্রিপশন বা ডিক্রিপশন কার্যক্রম সম্পন্ন করা হয়।

প্রোগ্রাম আউটপুট

File Encryption and Decryption Tool
Choose operation:
1. Encrypt a file
2. Decrypt a file
Enter choice (1 or 2): 1
Enter the input file name: plaintext.txt
Enter the output file name: encrypted.txt
Enter a single-character key for encryption/decryption: K
Operation completed successfully. Output file: encrypted.txt
  • প্রথমবার এনক্রিপ্ট করার সময় plaintext.txt ফাইল থেকে encrypted.txt ফাইল তৈরি করা হয়।
  • ডিক্রিপ্ট করার জন্য একই প্রক্রিয়ায় encrypted.txt ফাইলকে plaintext.txt আউটপুট ফাইল হিসেবে তৈরি করা যায়।

প্রোগ্রামের গুরুত্বপূর্ণ বিষয়সমূহ

  1. XOR এনক্রিপশন: প্রতিটি বাইটকে XOR অপারেশন করে ডেটা এনক্রিপ্ট ও ডিক্রিপ্ট করা হয়।
  2. বাইনারি মোড: ফাইলগুলো বাইনারি মোডে খোলা হয়েছে, যাতে বিভিন্ন ধরনের ডেটা এনক্রিপ্ট করা যায়।
  3. একটি কী ব্যবহার: কেবল একটি char টাইপ কী ব্যবহার করা হয়েছে, যা এনক্রিপ্ট ও ডিক্রিপ্ট উভয় কাজের জন্য যথেষ্ট।

প্রোগ্রামের সীমাবদ্ধতা এবং উন্নয়নের জন্য পরামর্শ

  1. বেশি সুরক্ষিত এনক্রিপশন অ্যালগরিদম: XOR এনক্রিপশন একটি সাধারণ পদ্ধতি, যা সুরক্ষিত নয়। প্রয়োজনে AES বা RSA এর মত শক্তিশালী এনক্রিপশন অ্যালগরিদম ব্যবহার করা যেতে পারে।
  2. কী ব্যবস্থাপনা: char এর পরিবর্তে একটি দীর্ঘ এবং শক্তিশালী কী ব্যবহারের মাধ্যমে এনক্রিপশন আরও শক্তিশালী করা যেতে পারে।
  3. ত্রুটি হ্যান্ডলিং: ফাইল ইনপুট-আউটপুট এবং অন্যান্য ত্রুটি হ্যান্ডলিং আরও উন্নত করা যায়।

এই প্রোগ্রামটি একটি বেসিক এনক্রিপশন ও ডিক্রিপশন টুল, যা সহজেই ব্যবহার করা যায় এবং ডেটা এনক্রিপ্ট এবং ডিক্রিপ্ট করার জন্য কার্যকর।

 

common.content_added_by

টু-ডু লিস্ট অ্যাপ

242
242

টু-ডু লিস্ট অ্যাপ হলো একটি জনপ্রিয় প্র্যাকটিস প্রোজেক্ট, যা ব্যবহারকারীদের বিভিন্ন টাস্ক বা কাজ সংরক্ষণ, আপডেট, মুছা এবং প্রদর্শনের সুযোগ দেয়। এই প্রজেক্টের মাধ্যমে প্রোগ্রামিংয়ের বেসিক ধারণা যেমন ক্লাস, অবজেক্ট, এবং মেনু ড্রাইভেন প্রোগ্রামিং ইত্যাদি শেখা যায়।

টু-ডু লিস্ট অ্যাপের প্রধান বৈশিষ্ট্যসমূহ

  1. নতুন টাস্ক যোগ করা: নতুন কাজ বা টাস্ক যোগ করা।
  2. টাস্ক দেখানো: সব টাস্ক প্রদর্শন করা।
  3. টাস্ক আপডেট করা: কোনো টাস্কের বিস্তারিত আপডেট করা।
  4. টাস্ক মুছে ফেলা: টাস্ক তালিকা থেকে কোনো টাস্ক মুছে ফেলা।
  5. টাস্ক সম্পন্ন চিহ্নিত করা: কোনো টাস্ক সম্পন্ন হলে তা চিহ্নিত করা।

উদাহরণ: C++ এ টু-ডু লিস্ট অ্যাপ তৈরি

নিচে একটি বেসিক টু-ডু লিস্ট অ্যাপ তৈরি করার কোড দেওয়া হলো, যেখানে একটি Task ক্লাসের মাধ্যমে টাস্কের বৈশিষ্ট্য সংজ্ঞায়িত করা হয়েছে এবং টাস্ক ম্যানেজমেন্টের জন্য বিভিন্ন মেথড তৈরি করা হয়েছে।

#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Task {
private:
    int id;
    string title;
    bool completed;

public:
    Task(int id, string title) : id(id), title(title), completed(false) {}

    int getId() const { return id; }
    string getTitle() const { return title; }
    bool isCompleted() const { return completed; }

    void markComplete() { completed = true; }
    void updateTitle(const string& newTitle) { title = newTitle; }

    void display() const {
        cout << "ID: " << id << "\nTitle: " << title
             << "\nStatus: " << (completed ? "Completed" : "Pending") << endl;
    }
};

class TodoList {
private:
    vector<Task> tasks;
    int nextId = 1;

public:
    void addTask(const string& title) {
        tasks.emplace_back(nextId++, title);
        cout << "Task added successfully!" << endl;
    }

    void displayTasks() const {
        if (tasks.empty()) {
            cout << "No tasks available." << endl;
            return;
        }

        for (const auto& task : tasks) {
            task.display();
            cout << "---------------------" << endl;
        }
    }

    void markTaskComplete(int id) {
        for (auto& task : tasks) {
            if (task.getId() == id) {
                task.markComplete();
                cout << "Task marked as completed." << endl;
                return;
            }
        }
        cout << "Task not found!" << endl;
    }

    void updateTask(int id, const string& newTitle) {
        for (auto& task : tasks) {
            if (task.getId() == id) {
                task.updateTitle(newTitle);
                cout << "Task updated successfully!" << endl;
                return;
            }
        }
        cout << "Task not found!" << endl;
    }

    void deleteTask(int id) {
        for (auto it = tasks.begin(); it != tasks.end(); ++it) {
            if (it->getId() == id) {
                tasks.erase(it);
                cout << "Task deleted successfully!" << endl;
                return;
            }
        }
        cout << "Task not found!" << endl;
    }
};

int main() {
    TodoList todoList;
    int choice, id;
    string title;

    do {
        cout << "\nTo-Do List\n";
        cout << "1. Add Task\n2. Display All Tasks\n3. Mark Task as Complete\n4. Update Task\n5. Delete Task\n6. Exit\n";
        cout << "Enter your choice: ";
        cin >> choice;

        switch (choice) {
            case 1:
                cout << "Enter task title: ";
                cin.ignore();
                getline(cin, title);
                todoList.addTask(title);
                break;
            case 2:
                todoList.displayTasks();
                break;
            case 3:
                cout << "Enter task ID to mark as complete: ";
                cin >> id;
                todoList.markTaskComplete(id);
                break;
            case 4:
                cout << "Enter task ID to update: ";
                cin >> id;
                cout << "Enter new title: ";
                cin.ignore();
                getline(cin, title);
                todoList.updateTask(id, title);
                break;
            case 5:
                cout << "Enter task ID to delete: ";
                cin >> id;
                todoList.deleteTask(id);
                break;
            case 6:
                cout << "Exiting..." << endl;
                break;
            default:
                cout << "Invalid choice. Please try again." << endl;
        }
    } while (choice != 6);

    return 0;
}

প্রোগ্রাম ব্যাখ্যা

Task ক্লাস:

  • id, title, এবং completed প্রোপার্টি রয়েছে।
  • markComplete() মেথডে টাস্ককে সম্পন্ন হিসেবে চিহ্নিত করা যায়।
  • updateTitle() মেথডে টাস্কের শিরোনাম আপডেট করা যায়।
  • display() মেথডে টাস্কের তথ্য প্রদর্শন করা হয়।

TodoList ক্লাস:

  • tasks নামে একটি ভেক্টর আছে, যেখানে সব টাস্ক অবজেক্ট রাখা হয়।
  • addTask() নতুন টাস্ক যোগ করে।
  • displayTasks() সব টাস্ক দেখায়।
  • markTaskComplete() নির্দিষ্ট আইডি অনুযায়ী টাস্ককে সম্পন্ন হিসেবে চিহ্নিত করে।
  • updateTask() নির্দিষ্ট আইডি অনুযায়ী টাস্কের শিরোনাম আপডেট করে।
  • deleteTask() নির্দিষ্ট আইডি অনুযায়ী টাস্ক মুছে ফেলে।

main ফাংশন:

  • এটি মেনু ভিত্তিক একটি সিস্টেম তৈরি করে, যা ব্যবহারকারীকে বিভিন্ন অপশন প্রদান করে এবং ব্যবহারকারী প্রদত্ত অপশন অনুযায়ী কার্য সম্পন্ন করে।

ফিচার আপগ্রেডের সম্ভাবনা

  1. ফাইল সিস্টেমে সংরক্ষণ: টাস্কগুলোকে একটি ফাইলে সংরক্ষণ করা যেতে পারে, যাতে প্রোগ্রাম বন্ধ করার পরেও টাস্কের তালিকা সংরক্ষিত থাকে।
  2. GUI ইন্টারফেস: প্রোগ্রামটিকে GUI ভিত্তিক করতে পারেন, যাতে এটি আরও ব্যবহারবান্ধব হয়।
  3. টাইম সেটিং এবং রিমাইন্ডার: নির্দিষ্ট সময়ে টাস্কের জন্য রিমাইন্ডার ফিচার যুক্ত করা যায়।
  4. টাস্কের প্রায়োরিটি: টাস্ককে উচ্চ, মধ্যম, এবং নিম্ন প্রায়োরিটি ভিত্তিক করতে পারেন, যাতে ব্যবহারকারীর জন্য গুরুত্বপূর্ণ কাজগুলিকে সহজে সনাক্ত করা যায়।

এই বেসিক টু-ডু লিস্ট অ্যাপটি প্রোগ্রামিংয়ের বেসিক ধারণা যেমন ক্লাস, অবজেক্ট, এবং ভেক্টর ব্যবহারের চমৎকার অনুশীলন প্রদান করে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion